---
title: Configuration settings
summary: Configuration keys consumed by this library, retrieval methods, and runtime dependencies.
status: draft
owner: SAIF Documentation
last_reviewed: 2026-08-21
library: SAIF.Services.Printing
reference_type: embedded
---

# Configuration settings

All runtime-variable configuration in `SAIF.Services.Printing` flows through the SAIF Environment API
(`EnvironmentServiceBase`). There is no `ConfigurationManager.AppSettings` usage, no `DbConnectionManager`
usage, no `GetSecureConfigSetting` usage, and no `<appSettings>` section in either config file. Four unique
Environment API keys and two boolean flags are consumed; the only local configuration artifacts are design-time
typed `applicationSettings` (web-reference URLs, unconditionally overwritten at runtime) and the ODP.NET
managed-driver provider registration.

## Configuration retrieval methods

| Method | Class / Interface | Namespace | Usage pattern |
| --- | --- | --- | --- |
| `GetConfigSetting(key As String) As String` | `EnvironmentServiceBase` | `SAIF.Framework.Security` / Environment API | Called with a string literal key. Two shapes: read once in the constructor and cached in a field (`clsPrint.New(envSvc)`, `clsRSPrint.New(envSvc)`); or read live on every property access (`clsPrint.IDMPath`). |
| `IsProduction As Boolean` | `EnvironmentServiceBase` | `SAIF.Framework.Security` / Environment API | Read once in `clsPrint.New(envSvc)` to derive the `Environment` label ([BR-PRT-002](business-rules.md#br-prt-002-environment-label-derivation)) |
| `IsWeb As Boolean` | `EnvironmentServiceBase` | `SAIF.Framework.Security` / Environment API | Read in `ReportBase.Render` to choose the security platform ([BR-PRT-009](business-rules.md#br-prt-009-default-printer-and-security-platform-selection)) |
| `AppGlobal.EnvironmentService` (static ambient accessor) | `AppGlobal` | `SAIF.Framework.Security` (`SAIF.BOF.Framework` package) | Service-locator fallback used by every parameterless constructor to obtain the environment service, delegated to the parameterised constructor |
| `ApplicationSettingsBase` typed settings (`My.Settings`) | `SAIF.Services.Printing.My.MySettings` | `SAIF.Services.Printing.My` | Auto-generated `Application`-scoped `WebServiceUrl` settings backing the two ASMX web references; consumed only as design-time proxy defaults — both values are overwritten at runtime |
| `ConfigurationManager.AppSettings` | — | `System.Configuration` | Not used — zero matches across all `.vb` files |
| `GetSecureConfigSetting` / `SystemHashUtil.ComputeHash` | — | — | Not used — zero matches |
| `DbConnectionManager` / `EnvironmentConfigKeys` | — | — | Not used — zero matches; this library performs no direct data access |

## Environment API settings

Settings retrieved via `EnvironmentServiceBase` (the SAIF Environment API). Concrete runtime values are not
visible in this repository — they live in the external Environment API store, keyed by application/environment.**

| Setting key | Method | Data type | Purpose | Consuming class | Source |
| --- | --- | --- | --- | --- | --- |
| `documentGeneratorServiceUrl` | `GetConfigSetting` | `String` | xPression `clsGenerate` ASMX endpoint URL, assigned to `m_Xpresso.Url` | `clsPrint` | SAIF.Services.Printing/clsPrint.vb |
| `documentMSMQPath` | `GetConfigSetting` | `String` | MSMQ queue path, cached in `m_MessagePath`, used to lazily construct the transactional `System.Messaging.MessageQueue` for deferred/composite distribution | `clsPrint` | SAIF.Services.Printing/clsPrint.vb |
| `idmFilePath` | `GetConfigSetting` | `String` | Imaging (IDM) drop location; re-read from the Environment API on every `IDMPath` access (not cached), then copied into `CompositeRequestClass.IDMPath` | `clsPrint` | SAIF.Services.Printing/clsPrint.vb |
| `sqlReportingServiceUrl` | `GetConfigSetting` | `String` | SSRS `ReportExecution2005` ASMX endpoint URL, assigned to `m_RS.Url` | `clsRSPrint` | SAIF.Services.Printing/clsRSPrint.vb |
| `IsProduction` (flag) | `IsProduction` property | `Boolean` | Sets `Environment` to `"Prod"` else `"Dev"` ([BR-PRT-002](business-rules.md#br-prt-002-environment-label-derivation)) | `clsPrint` | SAIF.Services.Printing/clsPrint.vb |
| `IsWeb` (flag) | `IsWeb` property | `Boolean` | Selects `clsSecurityPrincipal.Platform.Web` else `.Windows` ([BR-PRT-009](business-rules.md#br-prt-009-default-printer-and-security-platform-selection)) | `ReportBase` | SAIF.Services.Printing/Reporting/ReportBase.vb |

**Total: 4 unique Environment API keys, all plain-text, all `String`-typed (no generic `GetConfigSetting<T>` usage), plus 2 boolean behavior flags.**

## AppSettings (Web.config)

**None.** No `<appSettings>` section exists in `app.config` or `Web.config`, and no
`ConfigurationManager.AppSettings`, `AppSettings.Get(`, or `AppSettings[` reference exists in any `.vb` file in
the project.

## Database connection configuration

**None.** No connection strings, no `<connectionStrings>` section, and no `DbConnectionManager` calls or
ADO.NET/ODP.NET code exist in this library.

| Connection name | Provider | Retrieval method | Purpose | Source |
| --- | --- | --- | --- | --- |
| — | ODP.NET, Managed Driver (invariant `Oracle.ManagedDataAccess.Client`) | Provider factory registration only | Registered in `DbProviderFactories` to satisfy the hosting application/BOF framework runtime; **no connection is opened by this library**.* | SAIF.Services.Printing/app.config, SAIF.Services.Printing/Web.config |

## Secure settings

**None.** No `GetSecureConfigSetting` call, no `SystemHashUtil.ComputeHash`, and no `SystemType.WebApp` /
`SystemType.Service` reference exists anywhere in the library. Credentials for the xPression and SSRS calls are
not configuration-sourced — they are carried by the ambient Windows/Web identity via `clsSecurityPrincipal` and
the ASMX proxies' default credentials.*

## Transitive configuration (from dependencies)

| Setting key | Method | Source dependency | Dependency type | Purpose |
| --- | --- | --- | --- | --- |
| Environment API endpoint / application identity | `EnvironmentServiceBase` resolution | SAIF.BOF.Framework | NuGet | Resolved by the framework from host configuration not visible in this repository; the hosting application must have `AppGlobal.EnvironmentService` initialised before any parameterless constructor of `clsPrint`, `clsRSPrint`, or `ReportBase` runs.* |
| `oracle.manageddataaccess.client` section + `DbProviderFactories` entry | Config-file section merge | Oracle.ManagedDataAccess (NuGet) | NuGet | Required section declaration/registration for the referenced provider; not exercised by this library's code |

## Configuration dependencies

| Dependency | Type | Required at | Impact if missing |
| --- | --- | --- | --- |
| 4 Environment API keys (`documentGeneratorServiceUrl`, `documentMSMQPath`, `idmFilePath`, `sqlReportingServiceUrl`) | Environment API settings | Construction / property access | Affected constructor throws or the property yields a null endpoint |
| `AppGlobal.EnvironmentService` | Ambient static service | Startup, before any parameterless constructor of `clsPrint`, `clsRSPrint`, or `ReportBase` | Parameterless constructors fail to resolve an environment service |
| MSMQ queue at `documentMSMQPath` | Runtime resource | Asynchronous `distributeDocument` | Send fails; the queue must exist and be transactional |
| Path at `idmFilePath` | Runtime resource | Every `IDMPath` access | Imaging drop location must be writable by the process identity; a mid-process configuration change takes effect immediately for `IDMPath` but not for the cached URLs or the `Environment` label |
| `oracle.manageddataaccess.client` + `DbProviderFactories` registration | Config-file section | Host merge | Already present in the shipped `app.config`/`Web.config`; must be merged into the host's config if not already present |

### Custom configuration sections

| Section name | Handler type | Declared in | Purpose |
| --- | --- | --- | --- |
| `oracle.manageddataaccess.client` | `OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.122.21.1` | app.config, Web.config | ODP.NET Managed Driver configuration section; declared but empty in both files |
| `applicationSettings/SAIF.Services.Printing.My.MySettings` | `System.Configuration.ClientSettingsSection` | app.config | Backs the generated `My.Settings` typed accessors for the two ASMX web-reference URLs |
| `applicationSettings/SAIF.MySettings` | `System.Configuration.ClientSettingsSection` | app.config | Legacy section holding `SAIFPrint_xpresso_clsGenerate`; no generated designer class in this project maps to it — vestigial carry-over from a predecessor assembly named `SAIFPrint`* |
| `applicationSettings/SAIF.My.MySettings` | `System.Configuration.ClientSettingsSection` | app.config | Declared in `<configSections>` but has no corresponding body and no consuming designer class — dead declaration |

### Testability injectability notes

- `clsPrint.New(envSvc)` is `Public` — the environment service can be substituted.
- `clsRSPrint.New(envSvc)` is `Private` — the environment service cannot be substituted from outside; only the
  ambient `AppGlobal.EnvironmentService` path is reachable.
- `ReportBase.xPrint` constructs its `clsPrint` with the parameterless constructor, so a report's injected
  environment service is not propagated to the printer it uses.*

## Related documentation
- [Library index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Operations and processes](operations-processes.md)
- [Business rules](business-rules.md)

> **Note:** Statements marked with * were inferred from code structure, naming conventions, or
> contextual evidence where direct confirmation was not available in source artifacts. Statements
> marked with ** could not be confirmed; treat as unknown until verified.

## Sources
- `SAIF.Services.Printing/app.config`
- `SAIF.Services.Printing/Web.config`
- `SAIF.Services.Printing/My Project/Settings.Designer.vb`
- `SAIF.Services.Printing/My Project/Settings.settings`
- SAIF.Services.Printing/clsPrint.vb
- SAIF.Services.Printing/clsRSPrint.vb
- SAIF.Services.Printing/Reporting/ReportBase.vb
- SAIF.Services.Printing/app.config
- SAIF.Services.Printing/Web.config
- SAIF.Services.Printing/My Project/Settings.Designer.vb
